/*     */ package com.zimbra.cs.util.http;
/*     */ 
/*     */ import com.zimbra.common.util.Pair;
/*     */ import java.util.LinkedList;
/*     */ import java.util.List;
/*     */ import java.util.StringTokenizer;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class Range
/*     */ {
/*     */   public static final String HEADER = "Range";
/*     */   
/*     */   public List<Pair<Long, Long>> getRanges()
/*     */   {
/*  38 */     return this.ranges;
/*     */   }
/*     */   
/*  41 */   private List<Pair<Long, Long>> ranges = new LinkedList();
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static Range parse(String header)
/*     */     throws RangeException
/*     */   {
/*  64 */     if (header == null) {
/*  65 */       return null;
/*     */     }
/*     */     
/*     */ 
/*  69 */     header = header.trim();
/*     */     
/*     */ 
/*  72 */     if (!header.startsWith("bytes")) {
/*  73 */       throw new RangeException(400);
/*     */     }
/*     */     
/*     */ 
/*  77 */     header = header.substring(5).trim();
/*     */     
/*     */ 
/*  80 */     if ((header.isEmpty()) || (header.charAt(0) != '=')) {
/*  81 */       throw new RangeException(400);
/*     */     }
/*     */     
/*     */ 
/*  85 */     header = header.substring(1).trim();
/*     */     
/*  87 */     StringTokenizer tokenizer = new StringTokenizer(header, ",");
/*  88 */     Range range = new Range();
/*     */     
/*  90 */     while (tokenizer.hasMoreElements())
/*     */     {
/*  92 */       String rangeStr = tokenizer.nextToken().trim();
/*     */       
/*  94 */       if (!rangeStr.isEmpty())
/*     */       {
/*     */ 
/*     */ 
/*     */ 
/*  99 */         int dashPos = rangeStr.indexOf('-');
/*     */         
/* 101 */         if (dashPos == -1)
/*     */         {
/* 103 */           throw new RangeException(400);
/*     */         }
/*     */         
/* 106 */         Long start = null;
/* 107 */         Long end = null;
/*     */         try
/*     */         {
/* 110 */           if (dashPos > 0)
/*     */           {
/* 112 */             start = Long.valueOf(Long.parseLong(rangeStr.substring(0, dashPos).trim()));
/*     */           }
/*     */           
/* 115 */           if (dashPos + 1 < rangeStr.length())
/*     */           {
/* 117 */             end = Long.valueOf(Long.parseLong(rangeStr.substring(dashPos + 1).trim()));
/*     */             
/* 119 */             if ((end.longValue() < 0L) || ((start != null) && (start.longValue() > end.longValue()))) {
/* 120 */               throw new RangeException(400);
/*     */             }
/* 122 */           } else if (start == null) {
/* 123 */             throw new RangeException(400);
/*     */           }
/*     */         } catch (NumberFormatException e) {
/* 126 */           throw new RangeException(400);
/*     */         }
/*     */         
/* 129 */         range.ranges.add(new Pair(start, end));
/*     */       }
/*     */     }
/* 132 */     if (range.ranges.isEmpty()) {
/* 133 */       throw new RangeException(400);
/*     */     }
/*     */     
/* 136 */     return range;
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/util/http/Range.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */